package com.guli.mall.wms.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.guli.common.to.LockStockInfoTo;
import com.guli.common.to.OrderTo;
import com.guli.common.to.SkuHasStockTo;
import com.guli.common.to.StockWareTo;
import com.guli.common.utils.PageUtils;
import com.guli.mall.wms.entity.PurchaseDetailEntity;
import com.guli.mall.wms.entity.WareSkuEntity;
import com.guli.mall.wms.entity.vo.WareSkuNameVo;

import java.util.List;
import java.util.Map;

/**
 * 商品库存
 *
 * @author 罗俊华
 * @email 1007052116@qq.com
 * @date 2020-09-29 21:37:28
 */
public interface WareSkuService extends IService<WareSkuEntity> {

    PageUtils<WareSkuNameVo> queryPage(Integer currentPage, Integer size, Map<String, String> map);

    // 采购之后，更新仓库中对应商品的库存
    void updateWareSkuStockByPurchaseDetail(List<PurchaseDetailEntity> purchaseDetailListForUpdating);

    WareSkuEntity getWareSkuBySkuId(Long skuId);

    List<SkuHasStockTo> judgeStockExist(List<Long> skuId);

    Map<Long, Integer> getStockBySkuIdArray(List<Long> skuIds);

    void lockWareStock(StockWareTo stockWareTo);

    /**
     * 根据监听到的消息来解锁库存
     * */
    void unlockStock(List<LockStockInfoTo> lockStockInfoTos);

    /**
     * 根据 订单id 来解锁库存
     * @param orderId
     */
    void unlockStockByOrderId(Long orderId);

    /**
     * 根据 WareOrderTaskDetailIds 中记录的库存锁定信息来真正的扣减库存，并减去对应的库存锁定数量
     * @param wareOrderTaskDetailIds
     * @return
     */
    boolean deductStockByWareOrderTaskDetailIds(List<Long> wareOrderTaskDetailIds);
}

